package com.arellomobile.mvp.sample.github.mvp.presenters;
import android.text.TextUtils;
import android.util.Base64;
import com.arellomobile.mvp.InjectViewState;
import com.arellomobile.mvp.sample.github.R;
import com.arellomobile.mvp.sample.github.app.GithubApp;
import com.arellomobile.mvp.sample.github.common.Utils;
import com.arellomobile.mvp.sample.github.mvp.GithubService;
import com.arellomobile.mvp.sample.github.mvp.common.AuthUtils;
import com.arellomobile.mvp.sample.github.mvp.views.SignInView;
import javax.inject.Inject;
import rx.Subscription;
/**
* Date: 15.01.2016
* Time: 18:33
*
* @author Yuri Shmakov
*/
@InjectViewState
public class SignInPresenter extends BasePresenter<SignInView> {
@Inject
GithubService mGithubService;
public SignInPresenter() {
GithubApp.getAppComponent().inject(this);
}
public void signIn(String email, String password) {
Integer emailError = null;
Integer passwordError = null;
getViewState().hideFormError();
if (TextUtils.isEmpty(email)) {
emailError = R.string.error_field_required;
}
if (TextUtils.isEmpty(password)) {
passwordError = R.string.error_invalid_password;
}
if (emailError != null || passwordError != null) {
getViewState().showFormError(emailError, passwordError);
return;
}
getViewState().startSignIn();
String credentials = String.format("%s:%s", email, password);
final String token = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
Subscription subscription = mGithubService.signIn(token)
.doOnNext(user -> AuthUtils.setToken(token))
.compose(Utils.applySchedulers())
.subscribe(user -> {
getViewState().finishSignIn();
getViewState().successSignIn();
}, exception -> {
getViewState().finishSignIn();
getViewState().failedSignIn(exception.getMessage());
});
unsubscribeOnDestroy(subscription);
}
public void onErrorCancel() {
getViewState().hideError();
}
}